package com.pizzaonline.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Iterator;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jdom.Element;
import com.pizzaonline.utils.XMLControler;
import com.pizzaonline.JDBC.DataBase;
import com.pizzaonline.JDBC.DBControler;

/**
 * Servlet implementation class for Servlet: ModificationPizza
 *
 */
 public class ModificationPizza extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final long serialVersionUID = 1L;
   
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public ModificationPizza() {
		super();
	}   	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}  	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		//Mode UTF-8
		request.setCharacterEncoding("UTF-8");
		
		//Récupération des paramètres
		String nom_pizza = request.getParameter("nom_pizza");
		String[] ingredients = request.getParameterValues("ingredients");
		
		//Type de réponse
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		
		//Test des valeurs
		if(nom_pizza == null) {
			out.println("<b><font color=\"red\">Le champ nom est vide</font></b><br/>");
			out.println("<a href=\"modificationPizza.jsp?pizza="+nom_pizza+"\">Modifier une autre pizza</a><br/>");	
			return;
		}
		
		//Modification dans le fichier XML
		float newPrixPizza = 0;
		float oldPrixPizza;
		float oldPrixMenu;
		float newPrixMenu;
		ServletContext c = this.getServletConfig().getServletContext();
		try{
			//Lecture du fichier XML
			XMLControler.readXMLFile("carte.xml");
			
			//Récupération du noeud de la pizza
			Element courant = XMLControler.getElementPizza(nom_pizza);
			if(courant != null){
				
				//Suppression des descendants du noeud
				courant.removeChildren("Ingredient");
				
				//Ajout des nouveaux ingrédients
				for(int i=0;i<ingredients.length;i++){
					Element elIngredient = new Element("Ingredient");
					elIngredient.addContent(ingredients[i]);
					courant.addContent(elIngredient);
				}
				
				// Récupération de l'ancien prix de la pizza
				oldPrixPizza = XMLControler.getPrixPizza(nom_pizza);
				
				// Remise à jour du prix de la pizza
				DataBase db = new DataBase();
				newPrixPizza = DBControler.getSommeIngredients(ingredients, db);
				courant.setAttribute("prix",String.valueOf(newPrixPizza));
				
				//Calcul de la différence
				float diff = newPrixPizza - oldPrixPizza;
				
				// On teste si la pizza n'est pas déjà présente dans un menu
				// On remet à jour le prix du menu le cas échéant
				List menus = XMLControler.getMenusOfPizza(nom_pizza);
				Iterator iter = menus.iterator();
				while(iter.hasNext()){
					
					Element temp = (Element)iter.next();
					String nomMenu = temp.getAttributeValue("nom");
					oldPrixMenu = XMLControler.getPrixMenu(nomMenu);
					newPrixMenu = oldPrixMenu + diff;
					temp.setAttribute("prix",String.valueOf(newPrixMenu));
				}
			}
			else{
				System.out.println("Pas de pizza correspondante !");
			}
			
			//Sauvegarde du fichier XML
			XMLControler.saveXMLFile("carte.xml");
			out.println("<b><font color=\"green\">Modification réussie dans le fichier XML</font></b><br/>");
			out.println("<a href=\"modification.jsp?mode=pizza\">Modifier une autre pizza</a><br/>");	
		}
		catch(Exception e){
			System.out.println("Erreur de lecture du fichier XML");
			out.println("<b><font color=\"red\">Erreur de modification dans le fichier XML</font></b><br/>");
			out.println("<a href=\"modification.jsp?mode=pizza\">Recommencer</a><br/>");	
			e.printStackTrace();
		}
	}	  	  
	
	/* (non-Javadoc)
	 * @see javax.servlet.GenericServlet#init()
	 */
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
	}   
}